/**
 * API接口服务
 */
const http = require('./http');

/**
 * 用户相关接口
 */
const user = {
  /**
   * 微信登录
   * @param {Object} data 包含code和可选的userInfo
   * @returns {Promise} Promise对象
   */
  wxLogin: (data) => {
    return http.post('/api/user/wx-login', data);
  },
  
  /**
   * 获取用户信息
   * @param {Number} id 用户ID
   * @returns {Promise} Promise对象
   */
  getInfo: (id) => {
    return http.get(`/api/user/${id}`);
  },
  
  /**
   * 获取所有用户
   * @returns {Promise} Promise对象
   */
  getList: () => {
    return http.get('/api/user/list');
  },
  
  /**
   * 新增用户
   * @param {Object} data 用户信息
   * @returns {Promise} Promise对象
   */
  add: (data) => {
    return http.post('/api/user', data);
  },
  
  /**
   * 更新用户
   * @param {Object} data 用户信息
   * @returns {Promise} Promise对象
   */
  update: (data) => {
    return http.put('/api/user', data);
  },
  
  /**
   * 删除用户
   * @param {Number} id 用户ID
   * @returns {Promise} Promise对象
   */
  delete: (id) => {
    return http.del(`/api/user/${id}`);
  }
};

/**
 * 获取学院信息
 */
const getCollegeInfo = (type) => {
  let url = '/api/college/info';
  if (type) url += `?type=${type}`;
  return http.get(url);
};

/**
 * 获取新闻列表
 */
const getNewsList = () => {
  return http.get('/api/news/list');
};

/**
 * 创建新新闻
 * @param {Object} data 新闻数据
 * @returns {Promise} Promise对象
 */
const createNews = (data) => {
  return http.post('/api/news/add', data);
};

/**
 * 获取新闻详情
 * @param {Number} id 新闻ID
 * @returns {Promise} Promise对象
 */
const getNewsDetail = (id) => {
  return http.get(`/api/news/detail/${id}`);
};

/**
 * 获取最新新闻列表
 * @returns {Promise} Promise对象
 */
const getLatestNews = () => {
  return http.get('/api/news/latest');
};

/**
 * 上传图片
 * @param {String} filePath 图片的临时路径
 * @returns {Promise} Promise对象
 */
const uploadImage = (filePath) => {
  const BASE_URL = 'http://localhost:8080'; // 确保这里与http.js中的BASE_URL一致
  
  // 获取token
  const token = wx.getStorageSync('token');
  
  const header = {
    'Content-Type': 'multipart/form-data'
  };

  // 如果有token，则添加到请求头，使用Bearer格式
  if (token) {
    header['Authorization'] = `Bearer ${token}`;
  }

  return new Promise((resolve, reject) => {
    wx.uploadFile({
      url: BASE_URL + '/api/file/upload',
      filePath: filePath,
      name: 'file', // 必须与后端MultipartFile的参数名一致
      header: header,
      success: (res) => {
        // res.data 是一个字符串，需要解析为JSON对象
        const data = JSON.parse(res.data);
        // 后端返回的是直接的URL，所以这里直接resolve data
        if (res.statusCode === 200) {
          resolve(data);
        } else {
          reject(data);
        }
      },
      fail: (err) => {
        reject(err);
      }
    });
  });
};

/**
 * 招生相关接口
 */
const enrollment = {
  /**
   * 获取所有学院信息
   * @returns {Promise} Promise对象
   */
  getAllColleges: () => {
    return http.get('/api/enrollment/colleges');
  },
  
  /**
   * 获取所有学院信息及其专业
   * @returns {Promise} Promise对象
   */
  getAllCollegesWithMajors: () => {
    return http.get('/api/enrollment/colleges/with-majors');
  },
  
  /**
   * 根据ID获取学院信息
   * @param {Number} id 学院ID
   * @returns {Promise} Promise对象
   */
  getCollegeById: (id) => {
    return http.get(`/api/enrollment/college/${id}`);
  },
  
  /**
   * 根据ID获取学院信息及其专业
   * @param {Number} id 学院ID
   * @returns {Promise} Promise对象
   */
  getCollegeWithMajorsById: (id) => {
    return http.get(`/api/enrollment/college/${id}/with-majors`);
  },
  
  /**
   * 获取所有专业信息
   * @returns {Promise} Promise对象
   */
  getAllMajors: () => {
    return http.get('/api/enrollment/majors');
  },
  
  /**
   * 根据ID获取专业信息
   * @param {Number} id 专业ID
   * @returns {Promise} Promise对象
   */
  getMajorById: (id) => {
    return http.get(`/api/enrollment/major/${id}`);
  },
  
  /**
   * 根据学院ID获取专业列表
   * @param {Number} collegeId 学院ID
   * @returns {Promise} Promise对象
   */
  getMajorsByCollegeId: (collegeId) => {
    return http.get(`/api/enrollment/college/${collegeId}/majors`);
  },
  
  /**
   * 获取专业详细信息（包括课程和就业方向）
   * @param {Number} id 专业ID
   * @returns {Promise} Promise对象
   */
  getMajorDetailById: (id) => {
    return http.get(`/api/enrollment/major/${id}/detail`);
  }
};

/**
 * 招聘信息相关接口
 */
const employment = {
  /**
   * 分页查询招聘信息
   * @param {Object} params 查询参数
   * @returns {Promise} Promise对象
   */
  getJobs: (params) => {
    return http.get('/api/employment/jobs', params);
  },
  
  /**
   * 获取最新招聘信息
   * @param {Number} limit 限制数量
   * @returns {Promise} Promise对象
   */
  getLatestJobs: (limit) => {
    return http.get('/api/employment/jobs/latest', { limit });
  },
  
  /**
   * 根据ID获取招聘信息详情
   * @param {Number} id 招聘信息ID
   * @returns {Promise} Promise对象
   */
  getJobById: (id) => {
    return http.get(`/api/employment/job/${id}`);
  },
  
  /**
   * 提交职位申请
   * @param {Object} data 申请数据
   * @param {Function} onProgress 上传进度回调
   * @returns {Promise} Promise对象
   */
  applyJob: (data, onProgress) => {
    return http.upload('/api/employment/apply', {
      filePath: data.resumeFile,
      name: 'resumeFile',
      formData: {
        jobId: data.jobId,
        name: data.name,
        phone: data.phone,
        email: data.email,
        introduction: data.introduction
      },
      onProgress
    });
  },
  
  /**
   * 根据手机号查询职位申请
   * @param {String} phone 手机号
   * @returns {Promise} Promise对象
   */
  getApplicationsByPhone: (phone) => {
    return http.get(`/api/employment/applications/phone/${phone}`);
  }
};

module.exports = {
  user,
  getCollegeInfo,
  getNewsList,
  createNews,
  getNewsDetail,
  getLatestNews,
  uploadImage,
  getMyNews: () => {
    return http.get('/api/news/my');
  },
  updateNews: (data) => {
    return http.put('/api/news/update', data);
  },
  deleteNews: (id) => {
    return http.del(`/api/news/delete/${id}`);
  },
  enrollment,
  employment
};